package seckill.service;

import seckill.dto.Exposer;
import seckill.dto.SeckillExecution;
import seckill.entity.Seckill;
import seckill.exception.RepeatKillException;
import seckill.exception.SeckillCloseException;
import seckill.exception.SeckillException;

import java.util.List;

/*
    业务接口:站在"使用者"角度设计接口
    三个方面:方法定义粒度 参数 返回类型(return类型/异常)
 */
public interface SeckillService {

    //查询所有秒杀记录
    List<Seckill> getSeckillList();

    //查询单个秒杀记录
    Seckill getById(long seckillId);

    //秒杀开启是输出秒杀接口地址
    //否早输出系统时间和秒杀时间
    //返回DTO对象
    Exposer exportSeckillUrl(long seckillId);

    //执行秒杀操作
    //秒杀成功后开启一个DTO对象

    //通过Java操作SQL语句
    SeckillExecution executeSeckill(long seckillId, long userPhone, String md5) throws SeckillException, RepeatKillException, SeckillCloseException;

    //通过存储过程操作SQL语句
    SeckillExecution executeSeckillProcedure(long seckillId, long userPhone, String md5) throws SeckillException, RepeatKillException, SeckillCloseException;

}
